//
//  main.m
//  Day4
//
//  Created by dllo on 16/5/10.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import <Foundation/Foundation.h>
#define NUMBER_COUNT 3
int main(int argc, const char * argv[]) {
    
#pragma mark - 数组
    // 数组:用来存放一组相同数据类型的数据结构
    
    // 数组的定义
    
    //元素类型 数组名[元素个数] = {值1, 值2};
    //元素类型:就是数组中存放的元素的数据类型
    //元素个数:就是数组能够存放元素的个数
    //    int score[3] = {60, 70, 80};
    //在定义数组的时候,系统会自动的给数组中每个元素分配一个角标,这个角标就是索引,从0开始,依次递增的.
    //访问数组元素:数组名[索引值]
    //    printf("a = %d\n", score[0]);
    //数组的遍历:访问数组内全部的元素的过程就叫做遍历 一般都跟循环配合使用
    //动态的计算数组长度:  看变量占得字节数用 sizeof(数组名或变量名)
    
    //    int length = sizeof(score) / sizeof(score[0]);
    //    for (int i = 0 ;i < length;i++) {
    //        printf("成绩是%d\n",score[i]);
    //    }
    
    //定义数组时,元素个数可以省略,初始化了几个值,数组长度就是几
    //注意:在访问数组个数或者定义数组的时候一定要注意数组越界问题.
    //    int ages[] = {1, 2, 3};
    
    //    int a[20] = {0};
    //    int sum = 0;
    //    int len = sizeof(a) / sizeof(a[0]);
    //    for (int i = 0; i < len; i++) {
    //        a[i] = arc4random() % (70 - 30 + 1) + 30;
    //        sum += a[i];
    //    }
    //    printf("和为:%d\n", sum);
    
    
    
    
    //sizeof只是一个运算符,而不是一个函数
    //数组的寻址是从低字节开始,先定义的地址小
    //    char str[] = {'a', 'b', 'c', 'd'};
    
    //数组名就是数组的地址
    //    printf("%p", &str);
    //数组首元素的地址就是数组的地址    &str == &str[0]
    
    
    
    
    //    int b[5] = {1, 2, 3, 4, 5};
    //    int c[5] = {0};
    //    for (int j = 0; j < 5; j++) {
    //        c[j] = b[j];
    //        printf("%d,", c[j]);
    //    }
    // 注意  不能直接对数组进行运算,只能对数组内的单个元素进行运算
    
    //    int a[10] = {0};
    //    int b[10] = {0};
    //    int c[10] = {0};
    //    for (int i = 0; i < 10; i++) {
    //        a[i] = arc4random() % (40 - 20 + 1) + 20;
    //        b[i] = arc4random() % (40 - 20 + 1) + 20;
    //        c[i] = a[i] + b[i];
    //    }
    
#pragma mark - 冒泡排序
    // 每相邻两个数比较,每完全比较一次,最值放到最后边
    //    int a[5] = {5,4,3,2,1};
    //    int temp = 0;
    //    for (int i = 0; i < 4; i++) {
    //        for (int j = 0; j < 4 - i; j++) {
    //            // 判断前一位和后一位的大小
    //            if(a[j] > a[j + 1]) {
    //                //如果前一位大于后一位,交换两个数的值
    //                 temp = a[j];
    //                a[j] = a[j + 1];
    //                a[j + 1] = temp;
    //            }
    //        }
    //    }
    //    for (int i = 0; i < 5; i++) {
    //        printf("%d,", a[i]);
    //    }
//    
//    int a[10] = {0};
//    for (int x = 0; x < 9; x++) {
//        a[x] = arc4random() % (40 - 20 + 1) + 20;
//    }
//    int temp = 0;
//    for (int i = 0; i < 9; i++) {
//        for (int j = 0; j < 9 - i; j++){
//            if (a[j] > a[j + 1]) {
//                temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    for (int y = 0; y < 10; y++) {
//        printf("%d,", a[y]);
//    }
    
//    int a[5] = {20, 30, 10 , 9 ,4};
//    int temp = 0;
//    for (int i = 0; i < 4; i++) {
//        for (int j = 0; j < 4 - i; j++) {
//            if (a[j] > a[j + 1]) {
//                temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 5; i++) {
//        printf("%d,", a[i]);
//    }
    
//    int a[5] = {20, 30, 10 , 9 ,4};
//    int temp = 0;
//    for (int i = 0; i < 4; i++) {
//        for (int j = 0; j < 4 - i; j++) {
//            if (a[j] < a[j + 1]) {
//                temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 5; i++) {
//            printf("%d,", a[i]);
//    }
    
    
#pragma mark - 字符数组
    // 区别:下面的在创建的时候系统会自动在最后边加上一个'\0','\0'是字符数组的结束标志
//    char str[5] = {'a', 'b', 'c', 'd', 'e'};
//    char strTwo[] = "abcde";
    //  sizeof()求得是所占用的自己数   算'\0'
    //  strlen()求得是字符数组的长度   不算'\0'
#pragma mark -  字符数组长度 strlen()
    // sizeof()只是占用的内存字节数,并不是真实的长度
    
//    int length = strlen(str);
//    int strTwoLength = strlen(strTwo);
//    
//    printf("str = %d\n", length);
//    printf("strTWo = %d\n", strTwoLength);
    // strlen是根据'\0'结束标记计算的长度,从数组的首地址开始寻找'\0',直到找到第一个'\0'为止.
    
#pragma mark - 字符串的拷贝 strcpy()
//    char str[] = "iPhone";  //源数组
//    char strs[7] = {0};  //目的数组的容量一定大于等于源数组
//    //strcpy(目的数组,源数组);
//    strcpy(strs,str);
//    
//    for (int i = 0; i < 6 ;i++) {
//        printf("%c\n", strs[i]);
//    }
//    
//    // %s输出字符串
//    printf("%s\n", strs);
    
#pragma mark - 字符串的拼接 strcat()
//    char strOne[] = "I Love";
//    char strTwo[] = " iOS";
//    strcat(strOne, strTwo);
//    printf("%s\n", strOne);
    
#pragma mark - 字符串的比较 strcmp()
    
//    char str[] = "iphone";
//    char strs[] = "iPhone";
//    
//    printf("%d", strcmp(str,strs));
   
    

#pragma mark - test
//    char a[] = "afjnpue";
//    char b[] = {0};
//    
//    for (int i = 0; i < strlen(a); i++) {
//        b[i] = a[strlen(a) - 1 - i];
//    }
//    b[strlen(a)] = '\0';
//    
//    for (int i = 0; i < 8; i++) {
//        a[i] = b[i];
//    }
//    printf("%s\n" , a);
    
    
//    char str[] = "afjnpue";
//    for (int i = 0; i < strlen(str); i++) {
//        char temp = str[i];
//        str[i] = str[strlen(str) - i - 1];
//        str[strlen(str) - i - 1] = temp;
//    }
//    printf("%s" ,str);
    
#pragma mark - 宏定义  (替换)
    // 有变量
    // 没变量
#define NUMBER_COUNT 3
    // 宏定义一般都写在最上边
    // 宏定义的名字大写,多个单词用下划线_隔开
//    int count[NUMBER_COUNT] = {1, 2, 4};
    
#define 宏名(参数)
#define SUM(a, b) ((a) + (b))
    
//    int a = 3, b = 5;
//    int c = SUM(3, 5);
//#undef SUM(a, b)   //结束宏定义,失效
    
    
#pragma mark - 条件编译
    
#if 1
    printf("执行这段代码!!!!!\n");

#endif
    
#if 0
    printf("执行这里的代码===\n");
#endif
    
    int a[] = {9,8,5,4,6};
    int temp = 0;
    for (int i = 0; i < strlen(a); i++) {
        for (int j = 0; j < strlen(a) - i - 1; j++) {
            if (a[j] > a[j + 1]) {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < 5 ; i++) {
        printf("%d,",a[i]);
    }
    
    
    
    
    
    
    return 0;
}
